Write-Up

In this year’s analysis we are looking closer at what earns fantasy points, rather than what players win football games. Given that some of the best fantasy players are on some of the worst teams in the NFL, I chose to approach this problem differently this years.

To measure for and identify these “fantasy mvps”, we are combining historical performance with points share.

Points Share will be measured by the total yards a player makes in a given game, and dividing it by the net yards the team made that game. This will hopefully help identify those players that are standout MVPs for their given teams, and see the most action.

Attributing Points:

# Weights
points_attrib = {'First Down': 0.7,
                 'Touchdown': 7,
                 'Field Goal': 0.3}

# Defining Net Points Gained
pbp_data.loc[pbp_data.ydsnet != 0, 'net_points_gained'] = pbp_data.series_points * (pbp_data.yards_gained/pbp_data.ydsnet)

EDA

Above is a preview of the dataset we are using! This is thanks to the NFL Data Python Package. Given the timeframe of this project, we will be focusing on the following positions: - QBs - RBs - WRs - TEs

Another cleaning measure I used was to focus strictly on regular season games as that is the time frame fantasy football is prevalent.

Who’s Doing What?

Below represents the type of plays each of the positions above is involved in.

The above graphs show total # of plays executed by play time and position. This includes all plays between 2018 and 2023.

From these graphs we can see that Wide Receivers, Tight Ends and Running Backs can all make multiple types of plays. Therefore we want to make sure we consider all types of plays for all positions.

What’s also interesting from this graphic is that running backs are involved in receiving plays almost as much as tight ends!

Analysis

Given our EDA, we now create an overall dataset that combines total rushing, passing, receiving yards gained, and net points gained for every game and player.

Then we will calculate Fantasy Football Points using the following conversions:

  • 1pt for every 25 passing yards
  • 1pt for every 10 rushing or receiving yards
  • 6pts for every touchdown

This does not include every aspect of the fantasy football points calculation.

From here we calculate the total number of points generated by each player for each season. Once we have total points by every player, we calculate the weighted average Fantasy Football Points for every player in our dataset. The weights are defined as:

  • 2018: 0.5
  • 2019: 0.6
  • 2020: 0.7
  • 2021: 0.8
  • 2022: 0.9
  • 2023: 1.0

The reason being is we want to give emphasis to players performing in more recent seasons.

Once we have this calculation for every player in our dataset, we then normalize this to positions. We do this by calculating the average weighted average Fantasy Football Points per position. Then we divide our original weighted average by their positional normalizer.

We do this as fantasy football is a game with limited spots in each position. We want to find the best players to fill our entire team with. If we did not normalize our top ranked players would be mostly Quarterbacks.

Results

Even given my lack of knowledge of the NFL and football, the eye tests atleast passes as I recognize a good amount of these players!

Ultimately, with 0 knowledge of football, I finished 6th in my Fantasy Football league out of 8. I would say this is a win! As last year I finished dead last.

Things to improve upon next year:

  • Capture all aspects of how fantasy points are calculated
  • Feedback from my league members is my team is very old.
    • Focus on perfecting the weighted average and to consider rookies!
  • On draft day, an excel spreadsheet is hard to maneuver when players are being picked left and right
    • Try to come up with a GUI that allows for easier utilization of the rankings!

Thank you for reading, and see you next year!